package com.copa.l206;

/**
 * @author copa
 * @createDate 2022-05-23 16:28
 * @function 递归法
 */
public class Test2 {
    public ListNode reverseList(ListNode head) {
        // 详解看title.txt，关于递归的过程
        if (head == null || head.next == null) {
            return head;
        }
        // 返回的result其实是共用一个地址
        ListNode result = reverseList(head.next);
        // 其实这里是对象引用，由于head和result地址是共用的，所以可以这样设置
        // 比如原本是4->5 现在是4-><-5
        head.next.next = head;
        // 这里切断，比如5->4
        head.next = null;
        return result;
    }

    public static void main(String[] args) {
        ListNode head = new ListNode(1);
        head.next = new ListNode(2);
        head.next.next = new ListNode(3);
        head.next.next.next = new ListNode(4);
        head.next.next.next.next = new ListNode(5);
        ListNode result = new Test2().reverseList(head);
        while (result != null) {
            System.out.print(result.val + "\t");
            result = result.next;
        }
    }
}
